import logging
from datetime import timedelta
from redis import Redis


class Config:  # 方便统一管理配置信息
    DEBUG = True  # 设置调试模式
    SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@127.0.0.1:3306/info24"  # 设置mysql连接地址
    SQLALCHEMY_TRACK_MODIFICATIONS = False  # 设置是否追踪数据库变化
    REDIS_HOST = "127.0.0.1"  # 自定义配置信息  设置redis绑定的ip
    REDIS_PORT = 6379  # 设置redis监听的端口
    SESSION_TYPE = "redis"  # 设置redis的存储类型
    SESSION_REDIS = Redis(host=REDIS_HOST, port=REDIS_PORT)  # 设置redis连接对象, 组件内部会使用该对象进行数据的存取
    SESSION_USE_SIGNER = True  # 设置sessionid是否加密
    SECRET_KEY = "TGe7rhO8VaN4r/EDcRHqcr2/wO9G1wiJVWcAj3tSfyXnunbkp0kXbFW22WzIoZPn"  # 设置应用秘钥, 用于sessionid加密
    PERMANENT_SESSION_LIFETIME = timedelta(days=7)  # 设置session的过期时间, 默认是支持设置过期时间的
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True  # 设置每次请求结束, 自动提交


# 开发环境
class DevelepConfig(Config):  # 针对不同的代码环境定义配置子类
    DEBUG = True  # 设置调试模式
    # REDIS_HOST = "127.0.0.1"
    LOG_LEVEL = logging.DEBUG  # 设置日志级别
    WTF_CSRF_ENABLED = False  # 是否开启CSRF保护 开发阶段为了方便测试, 关闭校验


# 生产环境
class ProductConfig(Config):
    DEBUG = False  # 设置调试模式
    # REDIS_HOST = "222.10.11.123"
    LOG_LEVEL = logging.ERROR  # 设置日志级别
    WTF_CSRF_ENABLED = True  # 是否开启CSRF保护  项目上线, 开启CSRF校验


# 定义配置字典  记录配置类型和配置子类的关系
config_dict = {
    "pro": ProductConfig,
    "dev": DevelepConfig
}